<?php
class M_pago extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener los pagos a clientes existentes tanto activos como inactivos, pero no los borrados (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT pago.*, cliente.idCliente as idCliente, cliente.apellido as apellidoCliente, cliente.nombre as nombreCliente, DATE_FORMAT(pago.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, DATE_FORMAT(pago.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM pago, cliente
									  WHERE pago.idCliente=cliente.idCliente AND pago.estado<>-1 AND cliente.estado<>-1 $restriccion
									  ORDER BY pago.idPago DESC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los pagos a clientes activos existentes	
	function buscarActivos($restriccion=null){
		$consulta = $this->db->query("SELECT pago.*, cliente.idCliente as idCliente, cliente.apellido as apellidoCliente, cliente.nombre as nombreCliente, DATE_FORMAT(pago.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, DATE_FORMAT(pago.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM pago, cliente
									  WHERE pago.idCliente=cliente.idCliente AND pago.estado=1 AND cliente.estado<>-1 $restriccion
									  ORDER BY pago.idPago DESC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener el total pagado a clientes referentes
	function buscarTotal($restriccion=null){
		$consulta = $this->db->query("SELECT SUM(pago.monto) as total
									  FROM pago
									  WHERE pago.estado=1 $restriccion");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar un pago a un cliente
	function eliminar($idPago=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `pago` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `pago`.`idPago` = " . $this->db->escape($idPago) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear un pago a un cliente referente
	function crear($idCliente=null, $monto=null, $observacion=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `pago` (`idPago`, `idCliente`, `monto`, `observacion`, `fechaCreacion`, `estado`, `idCreador`) VALUES 
											 (NULL,".$this->db->escape($idCliente).",".$this->db->escape($monto).",".$this->db->escape($observacion).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver un pago al cliente en particular usado generalmente en el formulario de modificar
	function get($idPago=null){
		$consulta = $this->db->query("SELECT pago.*, cliente.apellido as apellido, cliente.nombre as nombre
									  FROM pago, cliente
									  WHERE pago.idCliente=pago.idCliente AND pago.estado<>-1 AND pago.idPago=".$this->db->escape($idPago)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver un pago a un cliente anterior o siguiente a uno en particular 
	function getContiguo($idPago=null, $cant=null){
		do{
			$idPago+=$cant;
			$consulta = $this->db->query("SELECT *
										  FROM pago
										  WHERE idPago=".$this->db->escape($idPago)."
										  LIMIT 1");
			if($consulta->num_rows == 0)
				return(0);
			
		}while($consulta->row()->estado=='-1');
		
		return($consulta->row()->idPago);
	}
	
	//Este metodo se utiliza para modificar un pago a un cliente
	function modificar($idPago=null, $monto=null, $observacion=null, $estado=null){
		$consulta = $this->db->query("UPDATE `pago`
									 SET `monto` = ". $this->db->escape($monto) .",
										 `observacion` = ". $this->db->escape($observacion) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `pago`.`idPago` = " . $this->db->escape($idPago) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>